package com.wyw.leetcode.learning.simple;

import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

/**
 * leetcode topic 217
 *  存在重复元素
 *      一个整数数组nums。如果任意值存在两次，返回true
 *
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2023/2/22 11:02
 */
public class Topic217 {

    public static void main(String[] args) {
        int[] nums = new int[]{2,3,1,0,2,3,5};
        System.out.println(containsDuplicate(nums));
    }

    /**
     * 哈希表
     * @param nums
     * @return
     */
    public static boolean containsDuplicate(int[] nums) {
        HashMap map = new HashMap();
        for(int i : nums) {
            if(map.get(i) != null) {
                return true;
            }
            map.put(i, 1);
        }
        return false;
    }

    /**
     * 利用set特性
     * @param nums
     * @return
     */
    public static boolean containsDuplicate1(int[] nums) {
//        Set<Integer> set = new HashSet();
//        for (int i: nums) {
//            set.add(i);
//        }
//        return set.size() != nums.length;

        Set<Integer> set = new HashSet();
        for (int i: nums) {
            if(!set.add(i)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 先排序，在比较
     * @param nums
     * @return
     */
    public static boolean containsDuplicate2(int[] nums) {
//        int[] newNums = Arrays.stream(nums).sorted().toArray();
//        if(newNums.length < 1)
//            return false;
//        for(int i =1; i< newNums.length; i++) {
//            if(newNums[i] == newNums[i-1])
//                return true;
//        }
//        return false;

        Arrays.sort(nums);
        for (int i = 0; i < nums.length-1; i++) {
            if(nums[i]==nums[i+1]){
                return true;
            }
        }
        return false;
    }
}
